package com.pattern.factory.abstractfactory2;

import com.pattern.factory.abstractfactory2.modern.ModernFactory;

/**
 * <p>
 * 在factorymethod中使用了接口  而在abstractfactory中使用了抽象类
 *         那么为什么要这样区分呢
 * 主要是一个语义上的区别：
 *             在abstractfactory中 Food、Vehicle、Weapon都是抽象的事物  故定义成抽象类
 *             在factorymethod中 Moveable是代表行为或者是能力  故定义成接口
 * </p>
 *
 * @author qingshan
 * @since 2020-07-19 17:20
 */
public class Main {

    public static void main(String[] args) {

    /*
        // 产品一族
        Car car = new Car();
        car.go();
        AK47 ak47 = new AK47();
        ak47.shoot();
        Bread bread = new Bread();
        bread.printName();

        // 另外产品一族
        Broom broom = new Broom();
        broom.go();
        MagicStick magicStick = new MagicStick();
        magicStick.shoot();
        MushRoom mushRoom = new MushRoom();
        mushRoom.printName();
    */


        // 上面创建产品一族就不用单独创建产品一族中的产品了
        // 而是通过产品族的工厂

        ModernFactory modernFactory = new ModernFactory();
        Vehicle car = modernFactory.createVehicle();
        car.go();
        Food bread = modernFactory.createFood();
        bread.printName();
        Weapon ak47 = modernFactory.createWeapon();
        ak47.shoot();

        // magic 方式同上



    }
}
